﻿/*****************************************************
**Copyright(C), 2021-2022, Ciqtek Technology.
**Version:     1.0
**Author:      dingyy
**Date:        2022/09/27
**Description: log4cplus封装
*****************************************************/

#ifndef LOG4CPLUS_H
#define LOG4CPLUS_H

#include "Base/NameSpace.h"
#include "Log/LogLite.h"
#include "log4cplus/loglevel.h"
#include "log4cplus/loggingmacros.h"

using namespace log4cplus;
using namespace log4cplus::helpers;

BEGIN_NAMESPACE_CIQTEK

class Log4cplus
{
public:
    /**
     * @brief  Log4cplus 构造函数
     * @return  
     */
    Log4cplus();

    /**
     * @brief  ~Log4cplus 析构函数
     * @return  
     */
    virtual ~Log4cplus();

public:
    /**
     * @brief  getInstance 单例
     * @return LogHelper&
     */
    static Log4cplus& getInstance();

    /**
     * @brief  init 初始化日志系统
     * @param  logPath 
     * @param  level 
     * @param  isShowLogger 
     * @return void 
     */
    void init(const QString logPath, LogLevel level = LOG_LEVEL_TRACE, bool isShowLogger = false);

    /**
     * @brief  release 释放日志系统
     * @return void 
     */
    void release();

public:
    /**
     * @brief  printLog 打印日志
     * @param  ll 
     * @param  log 
     * @return void 
     */
    static void printLog(LogLevel ll, QString log);

public:
    /**
     * @brief  trace 打印日志
     * @param  log
     * @return void
     */
    static void trace(QString log);

    /**
     * @brief  debug 打印日志
     * @param  log
     * @return void
     */
    static void debug(QString log);

    /**
     * @brief  info 打印日志
     * @param  log
     * @return void
     */
    static void info(QString log);

    /**
     * @brief  warn 打印日志
     * @param  log
     * @return void
     */
    static void warn(QString log);

    /**
     * @brief  error 打印日志
     * @param  log
     * @return void
     */
    static void error(QString log);

    /**
     * @brief  fatal 打印日志
     * @param  log
     * @return void
     */
    static void fatal(QString log);

private:
    /**
     * @brief  GetFileAppender file appender
     * @return SharedAppenderPtr 
     */
    SharedAppenderPtr GetFileAppender();

    /**
     * @brief  GetDebugAppender console appender
     * @return SharedAppenderPtr 
     */
    SharedAppenderPtr GetDebugAppender();

private:
    /** 日志级别
     */
    LogLevel m_logLevel;

    /** 日志文件目录
     */
    QString m_strLogPath;

    /** 是否显示logger名称
     */
    bool m_isShowLogger;
};

END_NAMESPACE_CIQTEK

#endif // LOG4CPLUS_H